package controller.MenuActions;

import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

import model.Constants;
import controller.Opslag;
import controller.OpslagFactory;

/**
 * 
 * Deze klasse is verantwoordelijk voor de acties die geassocieerd zijn met het
 * bestandmenu: laden en bewaren van een presentatie
 *
 */

public class BestandAction extends AbstractAction {

	private static final long serialVersionUID = 1L;
	private OpslagFactory opslagFactory = new OpslagFactory();
	private String typeBestand = Constants.TEKSTBESTAND;
	private String typeBewerking = Constants.LADEN;
	private Opslag opslag = opslagFactory.createTekstOpslag();
	private File file = null;

	@Override
	public void actionPerformed(ActionEvent e) {

		switch (typeBewerking) {
		case (Constants.LADEN):

			switch (typeBestand) {
			case (Constants.XMLBESTAND):
				file = vraagFile(Constants.OPEN, Constants.XMLBESTAND,
						Constants.XMLEXTENSIE);
				opslag = opslagFactory.createXMLOpslag();
				break;
			case (Constants.TEKSTBESTAND):
				file = vraagFile(Constants.OPEN, Constants.TEKSTBESTAND,
						Constants.TEKSTEXTENSIE);
				opslag = opslagFactory.createTekstOpslag();
			}
			opslag.laadPresentatie(file);
			break;

		case (Constants.BEWAREN):

			switch (typeBestand) {
			case (Constants.XMLBESTAND):
				file = vraagFile(Constants.BEWAAR, Constants.XMLBESTAND,
						Constants.XMLEXTENSIE);
				opslag = opslagFactory.createXMLOpslag();
				break;
			case (Constants.TEKSTBESTAND):
				file = vraagFile(Constants.BEWAAR, Constants.TEKSTBESTAND,
						Constants.TEKSTEXTENSIE);
				opslag = opslagFactory.createTekstOpslag();
			}

			try {
				opslag.bewaarPresentatie(file);
			} catch (IOException t) {
				System.out.println(Constants.FOUT + t.getMessage());
			}
			break;
		}
	}

	public BestandAction(String name, String shortDescription,
			Integer mnemonic, KeyStroke key, String typeBestand,
			String bewerking) {
		super(name, null);
		putValue(SHORT_DESCRIPTION, shortDescription);
		putValue(MNEMONIC_KEY, mnemonic);
		putValue(ACCELERATOR_KEY, key);
		this.typeBestand = typeBestand;
		this.typeBewerking = bewerking;
	}

	private File vraagFile(String bewerking, String typeBestand, String extensie) {

		JFileChooser fileopen = new JFileChooser();
		FileFilter filter = new FileNameExtensionFilter(typeBestand, extensie);
		fileopen.addChoosableFileFilter(filter);

		int ret = fileopen.showDialog(null, bewerking);
		File file = null;
		if (ret == JFileChooser.APPROVE_OPTION) {
			file = fileopen.getSelectedFile();
		}
		return file;

	}

}
